查看原文
其他

这两道题,曾经像一道光照亮了我,给了我最重要的底层能力

十一姐 帝呱呱星球 2022-06-10


最近我们在写关于编程思维的文章。编程思维是逻辑学、数学和计算机科学的结晶,背后其实是一系列的核心思维方法。


在上周的文章刷100道奥数题,不如学会这道逻辑题和它的思考方法,这才是数学和编程的通关密码里,我们解析了其中的两个: 分解和分类。用上这两种思维方法,基本上就能让一个程序不出错的跑起来了,算是编程里的基础思维。


那么,怎么能让一个程序运行起来更高效,编写起来也更简洁?这就得用上另外两个思维方法了:效率第一、发现并整合规律。


效率第一


先来说效率第一。


咱们一起来开动一下脑筋。


如果我们要让2个机器人把这些灰尘扫进簸箕里,要分几步?



很多人下意识的做法是3步:



有没有更好的步骤?


其实,把流程优化一下,2步就够了。



这是编程思维的一个重要原则:效率第一时刻想着怎么样对流程进行优化,让程序的步骤最少、用时最短、效率最高。


再来试试这个任务吧。


在高铁上,要取下每排座位上的枕巾,同时把座位转一个方向。


你很有可能会这么做:先把枕巾一条条取下来,再旋转座位。这是最顺其自然的想法。


用这种方法,因为最里边靠近车窗的枕巾手臂是够不着的,这就需要你移动身体,走到座位的最里边,再退出来。


把它拆解成分解步骤的话,一共需要6步。



这样没问题,能完成任务,但步骤有点多,而且要在座位的间隙里挤来挤去,也挺麻烦。有没有更有效率的方法呢?


调整一下流程呢?先取下手臂能够拿到的两条枕巾,接着旋转座位,靠近车窗的那条枕巾就旋转到手边了,这样的话,你不需要移动身体,就能轻松取下所有枕巾。


分解一下步骤,这样做只需要4步:



这其实就是“统筹安排”


统筹安排我一直觉得是数学里对我影响最大的方法。


还记得当年那2道题吗:


烧开水要8分钟,扫地5分钟,抹桌子2分钟,做完3件事最短一共要几分钟?


一个平底锅每次能煎2个煎饼,一个煎饼有两面,每面要煎2分钟。煎3个煎饼,最少要用几分钟?


这2道题曾经像一束光一样点亮了我,让我恍然大悟,原来应该这样思考问题、安排工作。它是我习得的最重要的底层能力之一。


其实改变孩子的,给孩子底层能力的,可能就是某一道照亮孩子的光。


当然,有时候要达到高效,还需要一点创造性的方法。


给大家留个思考题。


用一个带轮子的铲子,把散落在地上的这些狗狗粪便收集起来。



但是有一个条件,这个铲子转向的时候很慢很麻烦,所以要尽量走直线,减少转弯的次数。


你会怎么做呢?是这样吗?



一共转了两次弯。


其实,只要转向一次就能做到了。


你想出办法了吗?记得到留言里来告诉我哦~想知道答案的话,就关注我们,进入公号发送“思考题”获取吧。



发现并整合规律


咱们再假设一下,有个机器人站在离你5步远的地方,你要让它向你走过来。


你可能会这样下指令:


向我走1步

向我走1步

向我走1步

向我走1步

向我走1步

打字打得手都酸了,而且一不小心还会写错,写成“向我走11步”。


更简单的方法,当然是这样下指令:


重复5次

     向我走1步


这就是发现程序中的重复规律,并且进行整合,也就是算法中的“循环结构”


如果是要设计一个旋转木马的程序呢?


首先你要为它设计一个运行模式:旋转3圈,休息10秒;旋转3圈,休息10秒……如此循环。


那么“旋转3圈,休息10秒”就是一个重复规律。这个程序可以这样写:


重复无数次

     旋转1圈

     旋转1圈

     旋转1圈

     休息10秒


接着,你会进一步发现,“旋转1圈”也是一个重复单元。程序又可以进一步简化:


重复无数次

      重复3次

          旋转1圈

      休息10秒


除了循环结构,编程中的“函数”,也需要发现并整合重复规律的能力。


“函数”是编程里的一个概念,和数学里的函数不一样。它是什么呢?


简单来说,编程里的“函数”就是程序里会多次出现的一组动作,我把这组动作打个包,取个名字,每一次碰到这个动作的时候,就把这个动作包调出来用就行了。


有一些编程语言里会带有很多已经写好的、可供使用的内置函数,程序员只要拿来用就可以了,不需要再自己编写,这也是一个语言好不好用的重要原因之一。


但更多时候需要我们自己去打包函数。


比如上面这个旋转木马程序的例子。


木马“旋转1圈”这个动作里,就包含了很多分解动作,比如每匹马每转一圈都得“上去-下来-上去-下来-上去-下来”,那么,我们就可以把这一组动作,打包成一个函数,取名叫“旋转一圈”。以后每次碰到这组动作,就直接调用“旋转一圈”这个函数,而不用再把“上去-下来-上去-下来-上去-下来”的动作写一遍了。


其实,循环和函数是无处不在的,在我们的身体里也有内置的循环和函数。


如果我们可以进入自己身体里的呼吸运行系统,就会发现两个函数:吸入函数和呼出函数。



你看,从“横膈肌收缩”到“氧气进入血液”,每一次吸气,我们的身体都要进行这一系列的动作,我们就可以把这一系列动作打包成一个函数,取名叫“吸气”。事实上,你可以试试,当你的大脑给身体下指令吸气的时候,都是在调用函数“吸气”,而不用一步步的告诉身体需要做什么。


所以,如果给我们复杂的呼吸系统写一个程序,善于发现和整合规律的程序员,只要三行代码就够了。


循环无数次

      吸气(吸入函数)

      呼气(呼出函数)


在编程过程中你会发现,发现和整合规律,是孩子需要不断去练习的思维方法。


好了,懂了“分解、分类、效率第一、发现和整合规律”,孩子就已经具备了最核心的编程思维了,也能理解最基础的一些编程概念,像顺序结构(“分解”做一件事的步骤)、条件语句(“分类”不同的情况)、循环语句、函数等等。


这些核心思维方法,孩子将来不论做什么工作,都能从中受益,也足以让孩子成为一个合格的程序员。


但是,这些都是建立在我们已经知道了要让程序去做什么、怎么做,已经对一个问题有了解决方案的基础上。


如果,我根本不知道解决方案是什么怎么办呢?比如说,我要让一个程序找出太空中某一种特定的天体(这就是妞爸在做的事),我到底要让这个程序做些什么呢?什么样的思维方法可以帮助到我?


这就是下一篇文章我想和大家讨论的了。最后,别忘了咱们的思考题哦~


*快速了解帝呱呱星球,可以点击下方专辑哦~





长按上图中的二维码添加诞姐和十一姐的私人微信。来和我们聊一聊吧~

      转载开白请加微信:xywull商务合作请后台回复“商务合作”


   

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存